import store from '@/store/index'
import errorCode from './error-code'
import { getStore } from './store'
import { baseUrl } from './config'
// 网络请求

// uni.request请求加上token
function computedHeader (header = {}) {
	const isToken = header.isToken === false
	const token = store.getters.access_token
	if (token && !isToken) {
	    header['Authorization'] = 'Bearer ' + token// token
	}
	return header
}


const service = function(config) {
	/* 有的请求既有data又有params，那么params的参数就放在url后面
		注意：get、post、put请求参数都要放在data中
	*/
	if (config.params) {
		let queryStr = ''
		for(let key in config.params){
			queryStr += `${key}=${config.params[key]}&`
		}
		config.url = config.url + '?' + queryStr.slice(0, -1)
	}
	
	// App端不走vue.config.js代理，所以地址要是全地址
	// #ifndef H5
		// 有的请求需要走第三方接口，这时不能拼接全地址
		config.url = config.openWeb ? config.url  : baseUrl + config.url 
	// #endif
	
	return new Promise((resolve, reject) => {
		uni.request(Object.assign(config, {
			header: computedHeader(config.header),
			success: (res) => {
				const status = res.statusCode
				const message = res.data.msg || errorCode[status] || errorCode['default']
				if(status === 401){
					uni.showToast({
						title: message,
						icon: 'none',
						duration:  1500
					})
					store.dispatch('loginOut').then(() => {
						navigateToLogin()
					})
					return reject(new Error(message))
				}
				if (status !== 200 || res.data.code === 1) {
					uni.showToast({
						title: message,
						icon: 'none',
						duration:  1500
					})
					return reject(new Error(message))
				}
				resolve(res.data)
			}
		}))
	})
}

// 前往登录页、解决多次跳转登录页问题
function navigateToLogin () {
	setTimeout(() => {
		uni.navigateTo({
			url: '/pages/login/index'
		})	
	}, 1500)
}

export default service 